#ifndef __GRAPHIC_PARTICLE_DISPLAYER_2D__
    #define __GRAPHIC_PARTICLE_DISPLAYER_2D__

    // .. REFERENCES

    #include "ref_to_.h"
	#include "primitives.h"
	#include "text.h"
    #include "math_vector_2.h"
    #include "math_vector_3.h"
    #include "graphic_particle_displayer.h"
    class GRAPHIC_PARTICLE_TABLE;
	#include "defs.h"

    // .. TYPES

    class GRAPHIC_PARTICLE_DISPLAYER_2D :
        public GRAPHIC_PARTICLE_DISPLAYER
    {
        // -- PUBLIC

    public :

        // .. TYPES

        DECLARE_REF( GRAPHIC_PARTICLE_DISPLAYER_2D );

        // ~~

		struct VERTEX
		{
			MATH_VECTOR_3
				Position,
				UV;
			UINT32
				Color;
		};


        // .. CONSTRUCTORS

        GRAPHIC_PARTICLE_DISPLAYER_2D();

        // .. OPERATIONS

        virtual VOID Initialize(
            const TEXT & particle_texture,
            const GRAPHIC_PARTICLE_TABLE & particle_table
            );

        // ~~

        virtual VOID Render(
            const GRAPHIC_PARTICLE_TABLE & particle_table
            );

        // -- PRIVATE

    private :

        // .. CONSTRUCTORS

        GRAPHIC_PARTICLE_DISPLAYER_2D(
            const GRAPHIC_PARTICLE_DISPLAYER_2D & other
            );

        // .. OPERATORS

        GRAPHIC_PARTICLE_DISPLAYER_2D & operator=(
            const GRAPHIC_PARTICLE_DISPLAYER_2D & other
            );

        // .. OPERATIONS

        VOID UpdateVertexBuffer(
            const GRAPHIC_PARTICLE_TABLE & particle_table
            );

        // .. ATTRIBUTES

        ARRAY< VERTEX >
        	VertexTable;
    };
#endif
